import { useRequest } from 'ahooks'
import type { Options } from 'ahooks/lib/useRequest/src/types'
import axios from 'axios'

import './__mock__'

/** 时区 */
export interface IAddressRes {
  /**
   * 地址ID
   */
  addressId?: number
  /**
   * 地址类型 1.海运港口 2.空运机场 3.铁路站点 4.集货仓 5.中转仓
   */
  addressType?: number
  /**
   * 中文名
   */
  chineseName?: string
  /**
   * 城市
   */
  city?: string
  /**
   * 代码
   */
  code?: string
  /**
   * 联系人，始发地/目的地才有此值
   */
  contacts?: string
  /**
   * 国家
   */
  country?: string
  /**
   * 国家2字码
   */
  countryCode?: string
  /**
   * 联系邮箱，始发地/目的地才有此值
   */
  email?: string
  /**
   * 英文名
   */
  englishName?: string
  /**
   * 是否常用：0-否，1-是
   */
  isCommon?: number
  /**
   * 联系电话，始发地/目的地才有此值
   */
  phone?: string
  /**
   * 邮编
   */
  postalCode?: string
  /**
   * 省洲
   */
  stateProvince?: string
  /**
   * 详细地址1
   */
  street1?: string
  /**
   * 详细地址2
   */
  street2?: string
}

export interface TAddressListRes {
  list: IAddressRes[]
  /** 以 utcOffset 为键的映射 */
  offsetMap: Record<string, IAddressRes | undefined>
  /** 以 regions 为键的映射 */
  regionsMap: Record<string, IAddressRes | undefined>
}

interface TAddressListReq {
  /**
   * 地址类型 1.海运港口 2.空运机场 3.铁路站点 4.集货仓 5.中转仓
   */
  addressType?: number
}

/** SWR 地址列表 获取地址列表 */
export const useAddressList = (req?: TAddressListReq, opts?: Options<TAddressListRes, []>) => {
  const { addressType } = req || {}
  return useRequest<TAddressListRes, []>(
    async () => {
      const res = await axios.get(`/tmsapi/waybill_record_v2/addressList`, { params: { addressType } })
      const list: IAddressRes[] = res.$data || []
      const offsetMap = list.reduce<Record<string, IAddressRes | undefined>>(
        (o, i) => ({ ...o, [i.code || '']: i }),
        {},
      )
      const regionsMap = list.reduce<Record<string, IAddressRes | undefined>>(
        (o, i) => ({ ...o, [i.stateProvince || '']: i }),
        {},
      )
      return { list, offsetMap, regionsMap }
    },
    {
      cacheTime: -1, // 永不过期
      staleTime: -1, // 永远新鲜
      ...opts,
      cacheKey: 'SWRApi_useAddressList',
    },
  )
}
